package com.origin.chaos.framework.core.service;

import com.origin.chaos.framework.bean.vo.CanvasInfoVo;
import com.origin.chaos.framework.bean.vo.CreateCanvasVo;
import com.origin.chaos.framework.bean.vo.UpdateCanvasVo;
import com.origin.chaos.framework.core.PixelCanvas;
import com.origin.chaos.player.bean.vo.UpdatePixelVo;

import java.util.List;

/**
 * 画布的常用操作service
 *
 * @author: tao.ding
 * @date 2021-07-16
 */
public interface ICanvasService {

    /**
     * 创建一个指定大小的画布配置信息
     *
     * @param canvasVo 画布创建VO
     * @return 画布配置的ID
     */
    Long addCanvas(CreateCanvasVo canvasVo);

    /**
     * 修改画布的可编辑信息，宽高不可修改
     *
     * @param canvasVo 画布编辑VO
     */
    void updateCanvasEditableInfo(UpdateCanvasVo canvasVo);

    /**
     * 查询当前所有画布的基础信息列表
     *
     * @return
     */
    List<CanvasInfoVo> listCanvases();

    /**
     * 获取画布配置信息
     *
     * @param id 画布ID
     * @return id对应的画布配置信息, 不存在则抛出异常
     */
    PixelCanvas getCanvas(Long id);

    /**
     * 判断是否存在指定ID的画布配置信息
     *
     * @param id 画布ID
     * @return true: 指定ID的画布配置信息存在 false:不存在
     */
    boolean containsCanvas(Long id);

    /**
     * 更新指定画布的指定像素位的颜色
     *
     * @param vo
     */
    void updatePixel(UpdatePixelVo vo);
}
